package cn.js.service.impl;

import com.itextpdf.kernel.colors.Color;
import com.itextpdf.kernel.colors.DeviceRgb;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Div;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.properties.TextAlignment;

import java.io.FileOutputStream;
import java.io.IOException;

public class PdfGeneratorService {

    public static void generateBorrowingApplicationPdf() throws IOException {
        // 设置PDF输出路径
        String dest = "C:\\Users\\lenovo\\Desktop\\123\\0000.pdf";
        PdfWriter writer = new PdfWriter(new FileOutputStream(dest));
        PdfDocument pdf = new PdfDocument(writer);
        Document document = new Document(pdf, PageSize.A4);

        // 设置字体
        PdfFont font = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H",pdf);

        // 标题
        Paragraph title = new Paragraph("借阅申请单")
                .setFont(font).setFontSize(20).setTextAlignment(TextAlignment.CENTER);
        document.add(title);

        // 借阅申请单号
        Paragraph applicationNumber = new Paragraph("借阅申请单号: xxxxxxxx")
                .setFont(font).setFontSize(14).setBold();
        document.add(applicationNumber);


        //第一个表格
        Div tableContainer1 = new Div().setTextAlignment(TextAlignment.CENTER);
        // 创建第二个表格并设置自动布局
        Table table = new Table(4).setAutoLayout();
        // 设置表格宽度为页面宽度减去左右边距
        table.setWidth(pdf.getDefaultPageSize().getWidth() - 2 * document.getLeftMargin());


        // 表头
        addCell(table, "借阅人", font, true);
        addCell(table, "鲁**", font, false);
        addCell(table, "借阅时间", font, true);
        addCell(table, "2024-07-12 15:36:47", font, false);

        addCell(table, "借阅部门", font, true);
        addCell(table, "浙江****业总公司", font, false);
        addCell(table, "借阅人单位", font, true);
        addCell(table, "浙江****业总公司", font, false);

        addCell(table, "联系电话", font, true);
        addCell(table, "1", font, false);
        addCell(table, "借阅申请说明", font, true);
        addCell(table, "", font, false);

        addCell(table, "借阅期限", font, true);
        addCell(table, "1天", font, false);
        addCell(table, "借阅方式", font, true);
        addCell(table, "实体档案", font, false);

        // 将第二个表格添加到Div中
        tableContainer1.add(table);

        // 将包含第二个表格的Div添加到文档中
        document.add(tableContainer1);



        /*------------------------*/


        // 添加间距
        Div spaceDiv = new Div().setHeight(20); // 设置间距高度为20pt
        document.add(spaceDiv);



        /*---------------------------*/



        // 第二个表格
        // 创建一个Div用于包含第二个表格，设置对齐方式为居中
        Div tableContainer = new Div().setTextAlignment(TextAlignment.CENTER);

        // 创建第二个表格并设置自动布局
        Table table2 = new Table(5).setAutoLayout();
        // 设置表格宽度为页面宽度减去左右边距
        table2.setWidth(pdf.getDefaultPageSize().getWidth() - 2 * document.getLeftMargin());

        // 创建一个合并后的单元格
        Cell mergedCell = new Cell(1, 5)
                .add(new Paragraph("合并后的表头内容").setFont(font).setTextAlignment(TextAlignment.CENTER))
                .setBackgroundColor(new DeviceRgb(220, 220, 220));
        table2.addCell(mergedCell);


        addCell(table2, "编号", font, true);
        addCell(table2, "案卷提名或文件名称", font, true);
        addCell(table2, "档号", font, true);
        addCell(table2, "利用方式", font, true);
        addCell(table2, "利用目的", font, true);


        addCell(table2, "1", font, false);
        addCell(table2, "****1", font, false);
        addCell(table2, "80-1234-0-Y-0005", font, false);
        addCell(table2, "阅览", font, false);
        addCell(table2, "其他", font, false);

        addCell(table2, "2", font, false);
        addCell(table2, "****2", font, false);
        addCell(table2, "80-1234-0-Y-0006", font, false);
        addCell(table2, "复印", font, false);
        addCell(table2, "工作需要", font, false);

        // 将第二个表格添加到Div中
        tableContainer.add(table2);

        // 将包含第二个表格的Div添加到文档中
        document.add(tableContainer);


        // 创建“借阅人签字: ”段落并设置靠右对齐
        Paragraph signatureParagraph = new Paragraph("借阅人签字: ")
                .setFont(font).setFontSize(12)
                .setTextAlignment(TextAlignment.RIGHT);;

        // 使用Div控制与右边的距离
        Div signatureDiv = new Div()
                .add(signatureParagraph)
                .setMargin(30)//设置上边距
                .setMarginRight(80); // 设置与右边的距离
        document.add(signatureDiv);



        // 创建“借阅人时间: ”段落并设置靠右对齐
        Paragraph signatureParagraph2 = new Paragraph("___年___月___日")
                .setFont(font).setFontSize(12)
                .setMargin(30)//设置上边距
                .setTextAlignment(TextAlignment.RIGHT);;

        document.add(signatureParagraph2);


        document.close();


    }

    private static void addCell(Table table, String text, PdfFont font, boolean isHeader) {
        Cell cell = new Cell().add(new Paragraph(text).setFont(font));
        if (isHeader) {
            cell.setBackgroundColor(new DeviceRgb(200, 200, 200));
        }
        table.addCell(cell);
    }
}